Học cách biến khối tùy chỉnh thành "công cụ đa năng" nhờ tham số đầu vào, đồng thời viết mã một lần và dùng lại ở nhiều nơi trong dự án.
Tái sử dụng mã nguồn là gì?
Khi lập trình, bạn thường gặp những đoạn lệnh giống nhau lặp đi lặp lại — nhân vật nhảy, vẽ hình, tính điểm… Thay vì copy-paste hàng chục khối, ta gom chúng vào một khối tùy chỉnh (My Block) rồi gọi lại mỗi khi cần. Đó gọi là tái sử dụng mã nguồn.
Nhóm My Blocks (màu tím hồng) là nơi bạn tạo và quản lý các khối tùy chỉnh
Gọn gàng
Script chính ngắn, dễ đọc như mục lục
Sửa một chỗ
Chỉnh trong phần định nghĩa → mọi chỗ gọi đều đổi theo
Ít lỗi
Không phải sửa tay từng bản copy giống nhau
❌ Lặp mã
Cùng 8 khối "nhảy + quay + phát âm thanh" xuất hiện ở 5 chỗ khác nhau trong dự án.
✅ Tái sử dụng
Tạo khối nhảy_múa, gọi 5 lần — toàn bộ script chỉ còn 5 khối.
💡 Ghi nhớ
Nguyên tắc "Đừng lặp lại chính mình" (DRY — Don't Repeat Yourself) là nền tảng của lập trình chuyên nghiệp. My Blocks giúp bạn áp dụng nguyên tắc này ngay trên Scratch.
Tham số — biến "linh hoạt" của khối tùy chỉnh
Khối không có tham số luôn làm đúng một việc cố định. Khi thêm tham số (parameter, còn gọi là đầu vào/input), khối trở nên linh hoạt: mỗi lần gọi bạn truyền giá trị khác nhau, khối xử lý theo giá trị đó.
Ví dụ dễ hình dung: khối chào (tên) — tham số tên thay đổi mỗi lần gọi, nhưng logic "nói lời chào" vẫn giữ nguyên.
định nghĩa chào (tên) nói (join [Xin chào, ] (tên)) trong [2] giây
khi nhấn phím [space] chào (Minh) chào (Lan)
Gọi chào (Minh) và chào (Lan) dùng chung một định nghĩa, nhưng kết quả khác nhau nhờ tham số truyền vào.
💡 Ghi nhớ
Tham số chỉ có giá trị bên trong khối định nghĩa tương ứng. Kéo bong bóng tham số ra ngoài phần define sẽ không hoạt động đúng — nó giống biến cục bộ của khối đó.
Các loại tham số trong Scratch
Khi nhấn Make a Block, bạn có thể thêm đầu vào bằng nút dấu +. Scratch hỗ trợ ba kiểu chính:
Số hoặc chữ
Nhận số (10, 3.5) hoặc văn bản ("hello")
Đúng/Sai
Nhận giá trị logic (true/false) — bật/tắt tính năng
Nhãn văn bản
Chỉ để ghi chú trên khối, không nhận dữ liệu
Tham số số hoặc chữ
Dùng nhiều nhất. Có thể truyền số bước di chuyển, tọa độ, nội dung câu nói, tên nhân vật… Bong bóng tham số xuất hiện trong khối define và bạn kéo nó vào chỗ cần dùng.
📌 Ví dụ: Di chuyển đến tọa độ bất kỳ
Tạo khối đến_vị_trí (x) (y) với hai tham số số. Trong define: đặt x, đặt y. Mỗi lần gọi đến_vị_trí (100) (-50) hoặc đến_vị_trí (0) (0) nhân vật bay đến vị trí khác nhau.
Tham số Đúng/Sai (boolean)
Phù hợp khi muốn bật hoặc tắt một hành vi trong cùng một khối. Ví dụ khối nhảy (có âm thanh?) — nếu tham số là đúng thì phát tiếng, sai thì chỉ nhảy im lặng.
định nghĩa nhảy (có tiếng?) nhảy nếu <(có tiếng?) = [đúng]> thì phát tiếng [pop v] kết thúc
Khối trả về giá trị (reporter)
Khi tạo khối, chọn Add an extension → bật Return value để khối không chỉ làm việc mà còn trả về một số hoặc chuỗi. Khối này có hình bong bóng tròn, dùng được bên trong khối khác.
📌 Ví dụ: Tính diện tích hình chữ nhật
Tạo reporter diện_tích (rộng) (cao) trả về (rộng) × (cao). Gọi diện_tích (5) (8) sẽ cho kết quả 40 — dùng trực tiếp trong khối so sánh hoặc gán biến.
Cách tạo khối có tham số
Chọn nhân vật cần dùng, mở nhóm My Blocks → Make a Block.
Đặt tên rõ ràng, ví dụ vẽ_hình (cạnh) (màu).
Nhấn + để thêm tham số; đặt tên mô tả cho từng tham số (có thể chèn nhãn văn bản giữa các tham số cho dễ đọc).
Chọn loại tham số: số/chữ, đúng/sai, hoặc bật trả về giá trị nếu cần.
Nhấn OK — khối define xuất hiện kèm các bong bóng tham số; kéo chúng vào script bên dưới.
Kéo khối gọi từ palette vào script chính, điền giá trị vào từng ô tham số.
Đặt tên tham số ngắn gọn, có nghĩa — giúp bạn và bạn cùng nhóm đọc code dễ hơn
💡 Ghi nhớ
Tham số có thể nhận biến hoặc khối reporter thay vì số cố định. Ví dụ gọi nhảy (bước nhảy) khi bước nhảy là biến thay đổi theo level game.
Cơ chế truyền tham số hoạt động thế nào?
Mỗi lần khối được gọi, Scratch sao chép giá trị bạn điền vào ô tham số và gán cho bong bóng tương ứng trong phần define. Các lệnh bên trong define chạy với giá trị đó — giống như hàm trong toán học: f(x) = x + 2, thay x = 5 thì kết quả là 7.
Truyền hằng số và truyền biến
Hằng số:vẽ_vuông (100) — luôn vẽ cạnh 100 bước.
Biến:vẽ_vuông (kích thước) — kích thước thay đổi theo game.
Biểu thức:vẽ_vuông ((điểm) × [2]) — truyền kết quả tính toán.
📌 Ví dụ: Khối vẽ đa giác
Khối vẽ_đa_giác (số cạnh) (độ dài):
Trong define: lặp lại (số cạnh) — tiến (độ dài), quay (360 / số cạnh) độ.
Gọi vẽ_đa_giác (3) (80) → tam giác; vẽ_đa_giác (6) (50) → lục giác.
Một define, nhiều hình — đó là sức mạnh của tham số kết hợp tái sử dụng mã.
Kết hợp tái sử dụng mã và tham số trong thực tế
Dự án game thường có nhiều "kẻ thù" di chuyển giống nhau nhưng tốc độ khác nhau. Thay vì viết script riêng cho từng con, bạn tạo một khối di_chuyển_kẻ_thù (tốc độ) và gọi với tham số khác nhau cho mỗi nhân vật clone.
Một khối, nhiều sprite
Mỗi nhân vật gọi cùng khối với tham số riêng
Khối lồng khối
Khối A gọi khối B, truyền tham số tiếp
Khối + vòng lặp
Lặp danh sách, mỗi phần tử truyền vào tham số
📌 Ví dụ: Hệ thống tính điểm linh hoạt
Tạo khối cộng_điểm (số điểm) (lý do):
Thay đổi biến điểm thêm (số điểm).
Hiện hiệu ứng và nói (lý do) trong 1 giây.
Gọi cộng_điểm (10) [ăn táo], cộng_điểm (50) [qua màn], cộng_điểm (-5) [chạm gai] — logic chung, hành vi khác nhau qua tham số.
💡 Ghi nhớ
My Blocks thuộc về từng nhân vật. Muốn nhiều sprite dùng chung, bạn phải tạo khối trên từng sprite hoặc dùng clone từ sprite "mẫu" đã có sẵn khối.
Mẹo viết tham số hiệu quả
Đặt tên có ý nghĩa
Dùng tốc độ thay vì a, nội dung thay vì x. Tên tốt giúp bạn nhớ tham số dùng để làm gì mà không cần mở phần define.
Giữ khối vừa phải
Một khối nên làm một việc rõ ràng. Nếu cần quá 5–6 tham số, cân nhắc tách thành hai khối nhỏ hơn — dễ đọc và dễ sửa hơn.
Ưu tiên tham số thay vì biến toàn cục
Đừng dùng biến tạm để "truyền" dữ liệu vào khối khi có thể dùng tham số trực tiếp. Tham số an toàn hơn vì không bị script khác ghi đè giữa chừng.
⚠️ Lỗi thường gặp
Quên kéo bong bóng tham số vào đúng chỗ trong define — khối chạy nhưng luôn dùng giá trị mặc định hoặc số 0. Luôn kiểm tra phần define sau khi thêm tham số mới.
⚠️ Lỗi thường gặp
Sửa tên tham số sau khi đã dùng nhiều nơi — các chỗ gọi cũ có thể bị lỗi. Nên đặt tên cẩn thận ngay từ đầu.
Dự án thực hành: Thư viện mini-game
Xây dựng bộ khối tái sử dụng cho game đơn giản, mỗi khối có tham số riêng:
📌 Gợi ý các khối cần tạo
đặt_vị_trí (x) (y) — đưa nhân vật về tọa độ bất kỳ.
hiện_bong_bóng (nội dung) (giây) — nhân vật nói chữ trong thời gian cho trước.
nhảy_có_hướng (bước) (hướng) — tiến bước bước theo hướng độ.
kiểm_tra_thắng (điểm_cần) — reporter trả về đúng nếu điểm ≥ điểm cần.
Script chính của game chỉ còn vài dòng gọi khối — dễ đọc như kịch bản. Khi muốn đổi cách nhân vật nói chuyện, bạn sửa duy nhất trong define của hiện_bong_bóng, mọi cảnh trong game cập nhật theo.
💡 Ghi nhớ
Truyền tham số và tái sử dụng mã không chỉ giúp dự án gọn — đó là bước đầu học hàm và trừu tượng hóa, hai khái niệm quan trọng khi bạn chuyển sang Python hay các ngôn ngữ lập trình khác sau này.